/**
 * 
 */
package cz.cvut.fit.crhonjar.mi.run.hawera.tree;

import cz.cvut.fit.crhonjar.mi.run.hawera.symboltable.SymbolTable;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.block.BlockTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.expression.BinaryTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.expression.FunctionCallTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.expression.LiteralTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.expression.UnaryTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.AssignmentTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.BreakTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.ContinueTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.EmptyStatementTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.ForTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.ForeachTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.IfTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.ReturnTree;
import cz.cvut.fit.crhonjar.mi.run.hawera.tree.statement.WhileTree;

/**
 * @author Jarec
 * @since 24.10.2011
 */
public interface TreeVisitor {

	/**
	 * visits assignment
	 * 
	 * @param assignmentTree
	 */
	void visitAssignment(AssignmentTree assignmentTree);

	/**
	 * visits binary
	 * 
	 * @param binaryTree
	 */
	void visitBinary(BinaryTree binaryTree);

	/**
	 * visits Block
	 * 
	 * @param blockTree
	 */
	void visitBlock(BlockTree blockTree);

	/**
	 * visits break
	 * 
	 * @param breakTree
	 */
	void visitBreak(BreakTree breakTree);

	/**
	 * visits continue
	 * 
	 * @param continueTree
	 */
	void visitContinue(ContinueTree continueTree);

	/**
	 * visits empty statement
	 * 
	 * @param emptyStatementTree
	 */
	void visitEmptyStatement(EmptyStatementTree emptyStatementTree);

	/**
	 * visits for statement
	 * 
	 * @param forTree
	 */
	void visitFor(ForTree forTree);

	/**
	 * visits foreach statement
	 * 
	 * @param foreachTree
	 */
	void visitForeach(ForeachTree foreachTree);

	/**
	 * visits identifier
	 * 
	 * @param identifierTree
	 */
	void visitIdentifier(FunctionCallTree identifierTree);

	/**
	 * visits if statement
	 * 
	 * @param ifStatement
	 */
	void visitIf(IfTree ifStatement);

	/**
	 * visits return
	 * 
	 * @param returnTree
	 */
	void visitReturn(ReturnTree returnTree);

	/**
	 * visits symbol table
	 * 
	 * @param symbolTable
	 */
	void visitSymbolTable(SymbolTable symbolTable);

	/**
	 * visits unary expression
	 * 
	 * @param unaryTree
	 */
	void visitUnary(UnaryTree unaryTree);

	/**
	 * visits While
	 * 
	 * @param whileTree
	 */
	void visitWhile(WhileTree whileTree);

	/**
	 * visits literal
	 * 
	 * @param literalTree
	 */
	void visitLiteral(LiteralTree literalTree);

}
